package com.yxw.live_vod_boot.service;

import com.yxw.live_vod_boot.dto.AddVodPlayDto;
import com.yxw.live_vod_boot.dto.OndemandVideoQueryDTO;
import com.yxw.live_vod_boot.dto.UpdateVideoDTO;
import com.yxw.live_vod_boot.dto.UploadVideoDTO;
import com.yxw.live_vod_boot.vo.OnDemandPlayVo;
import com.yxw.live_vod_boot.vo.OnDemandVideoVo;
import com.yxw.live_vod_boot.vo.VideoPalyStatisticsVo;
import com.yxw.live_vod_facade.dto.PageVodInfoListDto;
import com.yxw.live_vod_facade.dto.VideoDeleteDTO;
import com.yxw.live_vod_facade.vo.PageVodInfoListVO;
import com.yxw.live_vod_facade.vo.RecommendVodListVo;
import com.yxw.live_vod_facade.vo.VideoReviewVO;
import com.yxw.live_vod_facade.vo.VodSalesRevenueVo;
import com.yxw.yxnet_cd_center.common.dto.PageVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.Set;

/**
 * 点播视频管理
 * @author liuxin
 * @date 2023.11.15
 */
public interface OnDemandVideoService {

    /**
     * 视频上传
     * @param videoFile
     * @param dto
     * @return
     */
    VideoReviewVO uploadVideo(MultipartFile videoFile, UploadVideoDTO dto);

    /**
     * 店铺点播视频列表
     * @param dto
     * @return
     */
    PageVO<OnDemandVideoVo> pageVideo(OndemandVideoQueryDTO dto);

    /**
     * 批量删除视频
     * @param dto
     */
    void deleteVideoByIds(VideoDeleteDTO dto);

    /**
     * 点播作品统计
     * @param videoId
     * @return
     */
    VideoPalyStatisticsVo getVideoPlayStatistics(Long videoId);


    /**
     * 视频修改
     * @param dto
     * @return
     */
    void updateVideoById(UpdateVideoDTO dto);


    /**
     * 店铺点播作品列表详情查询
     * @param dto
     * @return
     */
    PageVO<PageVodInfoListVO> pageVodInfoList(PageVodInfoListDto dto);

    /**
     * URL上传火山引擎后回调接口
     * @param json
     */
    void fileUploadByUrlComplete(String json);

    /**
     * 点播视频播放记录
     * @param dto
     */
    OnDemandPlayVo saveVodPlay(AddVodPlayDto dto);

    /**
     * 点播视频推荐列表查询
     * @return
     */
    Set<RecommendVodListVo> pageVodRecommendList();

    /**
     * 抽取热门数据和最新数据放入缓存(每天凌晨执行一次)
     */
    void extractVodByDay();

    /**
     * 查询点播上架商品和订单统计信息
     * @param videoId
     * @return
     */
    VodSalesRevenueVo getVodProductOrderByVideoId(Long videoId);

    /**
     * 图片文件上传
     * @param file
     * @return
     */
    String uploadImages(MultipartFile file);
}
